﻿using System;
using System.Collections.Generic;
using Castle.ActiveRecord;
using Atendex.Dominio.Interfaces;

namespace Atendex.Dominio.ActiveRecord
{
    [ActiveRecord(DiscriminatorValue = "atendente")]
    [Serializable]
    public class AtendenteAR : UsuarioAR, IAtendente
    {
        protected AtendenteAR() { }

        public AtendenteAR(string nome, string email, string login, string senha)
        {
            if (string.IsNullOrEmpty(nome)) throw new DominioException("Nome do atendente não pode ser vazio.");
            if (string.IsNullOrEmpty(login)) throw new DominioException("Login do atendente não pode ser vazio.");
            if (string.IsNullOrEmpty(senha)) throw new DominioException("Senha do atendente não pode ser vazio.");
            if (string.IsNullOrEmpty(email)) throw new DominioException("Email do atendente não pode ser vazio.");

            Nome = nome;
            Login = login;
            Email = email;
            Senha = senha;
            Ativo = true;


        }

        // HACK eu não entendo o porquê - mas se eu descomento isso,
        // ele para de conseguir excluir o Atendente de um Atendimento
        // (i.e. um dos testes falha). - d'Aquino
        [HasMany(typeof(AtendimentoAR), Cascade = ManyRelationCascadeEnum.AllDeleteOrphan, Inverse = true)]
        public IList<IAtendimento> Atendimentos { get; set; }

        public override string ToString()
        {
            return Nome;
        }
    }
}